﻿using System.Linq;
using Vk.Methods.Common;

namespace Vk.Methods.Messages
{
    /// <summary>
    ///     Результат выполнения метода messages.getDialogs
    /// </summary>
    public class GetDialogsResult
    {
        /// <summary>
        ///     Список диалогов
        /// </summary>
        public ListCount<DialogInfo> Dialogs { get; set; }

        /// <summary>
        ///     Количество непрочитанных входящих сообщений
        /// </summary>
        public short? UnreadDialogs { get; set; }

        public GetDialogsResult(ApiNode node)
        {
            var dialogs = node.SelectNodes("items/*");
            if (dialogs.Any())
            {
                Dialogs = new ListCount<DialogInfo>(node.Int("count").Value,
                                                    dialogs.Select(x => new DialogInfo(x)).ToList());
            }
            UnreadDialogs = node.Short("unread_dialogs");
        }
    }

    /// <summary>
    ///     Информация о диалоге
    /// </summary>
    public class DialogInfo
    {
        /// <summary>
        ///     Последнее сообщение
        /// </summary>
        public Message Message { get; set; }

        /// <summary>
        ///     Количество непрочитанных сообщений
        /// </summary>
        public short? Unread { get; set; }

        public DialogInfo(ApiNode node)
        {
            Unread = node.Short("unread");
            if (Unread == -1)
            {
                Unread = 0;
            }

            var messageNode = node.SelectNode("message");
            if (messageNode != null)
            {
                Message = new Message(messageNode);
            }
        }
    }
}